﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Sistema.WF.Componentes.FormulariosBase;
using Sistema.Dominio;
using Sistema.NFe;
using Sistema.Util;
using System.Net;

namespace Sistema.WF.View.NFE
{
    public partial class FRM_danfe :Form
    {
        NFeInfo xml;
        String nomeArquivo;
        public FRM_danfe(IList<NFeInfo> xml)
        {
            InitializeComponent();
            this.xml = xml.FirstOrDefault();
        }

     
        private void CMD_sair_Click(object sender, EventArgs e)
        {
            this.Close();
            this.Dispose();
        }

        private void FRM_danfe_Load(object sender, EventArgs e)
        {
           try
            { 
                Sistema.NFe.NFe geraXml = new Sistema.NFe.NFe();
                String proc = geraXml.GerarXmlProcNfe(this.xml);
             
                carregaHTML(proc);
                this.CriarProc(proc, this.xml);
                
           }
            catch (ViewException ex)
            {
                throw new ViewException(ex, "Erro ao emitir danfe", "Erro ao imprimir o danfe. Verifique sua conexão de internet.");
            }   
                          
        }

        private void carregaHTML(String dados)
        {
            try
            {
                          
               WB_danfe.DocumentText = Util.InteragirPHP.InteracaoWeb(dados);
                
            }
            catch (ViewException ex)
            {
                throw new ViewException(ex, "Não foi possível carregar o html.", "Erro ao carregar página. Por favor, teste sua conexão de internet.");
            }
            
           
        }

        private void CriarProc(String dados, NFeInfo xmlNota)
        {
            try
            {
                Arquivo arquivo = new Arquivo();
                nomeArquivo =  "nfe"+xmlNota.Numero+".xml";
                arquivo.CriarArquivo(dados,nomeArquivo, Properties.Resources.CaminhoArquivoProc);
                this.Backup(Properties.Resources.CaminhoArquivoProc,nomeArquivo);
            }
            catch (ViewException ex)
            {
                throw new ViewException(ex, "Erro ao criar arquivo na pasta destino.", "Erro ao gerar arquivo de distribuição.");
            }
        }

        private void Backup(String pasta,String arquivos)
        {
            Arquivo arquivo = new Arquivo();
            FTP ftp = new FTP();
            //SecureString secure = new SecureString();

            IList<String> listaArquivos = arquivo.buscarArquivo(pasta, arquivos);
            //IList<String> listaArquivos = arquivo.ListarArquivo(pasta,arquivos);

            String url = Properties.Resources.URLFTP;
            String login = Properties.Resources.LoginFTP;
            String senha = Properties.Resources.SenhaFTP;
            String diretorio = Properties.Resources.DiretorioFTP + new System.Configuration.AppSettingsReader().GetValue("CNPJ", typeof(String)) + "/";

            ftp.Enviar(url, diretorio, listaArquivos, login, senha);
                   }
        private void WB_danfe_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
           /* string url = e.Url.ToString();
            string arquivo = Properties.Resources.CaminhoArquivoDanfe+"\\"+nomeArquivo;
            new Arquivo().verificaSePastaExiste(Properties.Resources.CaminhoArquivoDanfe);
            new WebClient().DownloadFile(url, arquivo);*/
        }
    }
}
